package com.lagou.client;


import com.lagou.examutil.ClientScanner;
import com.lagou.model.User;
import com.lagou.model.UserMessage;

import java.io.IOException;


/**
 * @author StarryHorizon
 * @create 2022-01-07 16:55
 *
 * 编程实现客户端的主界面绘制和相应功能的实现
 */
public class ClientView {

    /**
     * 为了可以使用输入输出流，采用合成复用原则实现
     */
    private ClientInitClose cic;

    /**
     * 通过构造方法实现成员变量的初始化
     */
    public ClientView(ClientInitClose cic) {
        this.cic = cic;
    }
    /**
     * 自定义成员方法实现客户端主界面的绘制
     */
    public void clientMainPage() throws IOException, ClassNotFoundException {
        while (true) {
            System.out.println("  \n\n\t\t   在线考试系统");
            System.out.println("--------------------------------------------");
            System.out.print("  [1] 学员系统");
            System.out.println("    [2] 管理员系统");
            System.out.println("  [0] 退出系统");
            System.out.println("--------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    System.out.println("正在进入学院系统...");
                    break;
                case 2:
                    System.out.println("正在进入管理员系统...");
                    managerSystemPage();
                    break;
                case 0:
                    System.out.println("正在退出系统...");
                    return;
                default:
                    System.out.println("输入错误，请重新选择");
                    break;
            }
        }
    }

    /**
     * 实现管理员系统的页面绘制
     */
    private void managerSystemPage() throws IOException, ClassNotFoundException {
        // 如果登录失败，则直接返回
        if (!clientManagerLogin()) {
            return;
        }

    while (true) {
        System.out.println("  \n\n\t\t   管理员系统");
        System.out.println("--------------------------------------------");
        System.out.print("  [1] 学员管理");
        System.out.println("    [2] 考题管理");
        System.out.println("  [0] 退出系统");
        System.out.println("--------------------------------------------");
        System.out.println("请选择要进行的业务编号：");
        int choose = ClientScanner.getScanner().nextInt();
        switch (choose) {
            case 1:
                System.out.println("正在进入学员管理...");
                manageStudentInfoPage();
                break;
            case 2:
                System.out.println("正在进入考题管理...");
                break;
            case 0:
                System.out.println("正在退出系统...");
                return;
            default:
                System.out.println("输入错误，请重新选择");
                break;
        }
    }
}

    /**
     * 自定义成员方法实现客户端管理员登录的功能
     */
    private boolean clientManagerLogin() throws IOException, ClassNotFoundException {
        //1.准备管理员登录的相关数据
        System.out.println("请输入管理员的账户信息:");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入管理员的密码信息:");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("managerCheck", new User(userName, password));
        //2.将UserMessage类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送管理员账户信息成功");
        //3.接受服务器的处理结果并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("登录成功，欢迎使用");
            return true;
        } else {
            System.out.println("用户名或密码错误");
            return false;
        }
    }

    /**
     * 自定义成员方法实现学员管理模块页面绘制
     */
    public void manageStudentInfoPage() throws IOException, ClassNotFoundException {
        while (true) {
            System.out.println("  \n\n\t\t   学员管理系统");
            System.out.println("--------------------------------------------");
            System.out.print("  [1] 增加学生");
            System.out.println("    [2] 删除学生");
            System.out.print("  [3] 更新学生密码");
            System.out.println("    [4] 查找学生");
            System.out.println("  [0] 退出系统");
            System.out.println("--------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    System.out.println("正在新增学生信息...");
                    addStudent();
                    break;
                case 2:
                    System.out.println("正在删除学生信息...");
                    deleteStudent();
                    break;
                case 3:
                    System.out.println("正在更新学生密码信息...");
                    updateStudent();
                    break;
                case 4:
                    System.out.println("正在查找学生信息...");
                    searchStudent();
                    break;
                case 0:
                    System.out.println("正在退出系统...");
                    return;
                default:
                    System.out.println("输入错误，请重新选择");
                    break;
            }
        }
    }

    /**
     *实现学员增加功能
     */
    public void addStudent() throws IOException, ClassNotFoundException {
        //获取新学员信息
        System.out.println("请输入新增学员的用户名...");
        String studentName = ClientScanner.getScanner().next().trim();
        System.out.println("请输入新增学员的密码：");
        String password = ClientScanner.getScanner().next().trim();
        UserMessage userMessage = new UserMessage("addStudent", new User(studentName, password));

        // 将 UserMessage 类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(userMessage);
        System.out.println("发送新增学员的信息到服务器...");

        //3.接受服务器的处理结果并给出提示
        userMessage = (UserMessage) cic.getOis().readObject();
        if ("success".equals(userMessage.getType())) {
            System.out.println("学员新增成功");
        } else {
            System.out.println("新增学员失败");
        }
    }

    /**
     * 实现学员删除功能
     */
    public void deleteStudent() throws IOException, ClassNotFoundException {
        //删除学员信息
        System.out.println("请输入要删除学员的用户名...");
        String studentName = ClientScanner.getScanner().next().trim();
        UserMessage userMessage = new UserMessage("deleteStudent", new User(studentName, ""));

        // 将 UserMessage 类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(userMessage);
        System.out.println("发送要删除的学员信息到服务器...");

        //3.接受服务器的处理结果并给出提示
        userMessage = (UserMessage) cic.getOis().readObject();
        if ("success".equals(userMessage.getType())) {
            System.out.println("学员删除成功");
        } else {
            System.out.println("删除学员失败");
        }
    }

    /**
     * 实现学员密码更新功能
     */
    public void updateStudent() throws IOException, ClassNotFoundException {
        //获取新学员信息
        System.out.println("请输入学员的用户名...");
        String studentName = ClientScanner.getScanner().next().trim();
        System.out.println("请输入更新后的密码：");
        String password = ClientScanner.getScanner().next().trim();
        UserMessage userMessage = new UserMessage("updateStudent", new User(studentName, password));

        // 将 UserMessage 类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(userMessage);
        System.out.println("发送更新学员的信息到服务器...");

        //3.接受服务器的处理结果并给出提示
        userMessage = (UserMessage) cic.getOis().readObject();
        if ("success".equals(userMessage.getType())) {
            System.out.println("学员密码更新成功");
        } else {
            System.out.println("更新学员失败");
        }
    }

    /**
     * 实现学员查询功能
     */
    public void searchStudent() throws IOException, ClassNotFoundException {
        //删除学员信息
        System.out.println("请输入要查找学员的用户名...");
        String studentName = ClientScanner.getScanner().next().trim();
        UserMessage userMessage = new UserMessage("searchStudent", new User(studentName, ""));

        // 将 UserMessage 类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(userMessage);
        System.out.println("发送要查找的学员信息到服务器...");

        //3.接受服务器的处理结果并给出提示
        userMessage = (UserMessage) cic.getOis().readObject();
        if ("success".equals(userMessage.getType())) {
            System.out.println("学员查找成功");
        } else {
            System.out.println("查找学员失败");
        }
    }
}
